home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
LANG
/
PROLOG
/
BP330
/
!BinPro330
/
progs
/
color
< prev
next >
Wrap
Text File
|
1995-02-06
|
4KB
|
147 lines
/* Originally written by Neng-Fa Zhou, zhou@orchid.mse.kyutech.ac.jp */
/* Optimized (made about 100 times faster :-)) for BinProlog by Paul Tarau */
go :-
statistics(runtime,_),
regions(Rs,Dict),
solve(Rs,Dict),
statistics(runtime,[_,T]),
write('execution time is '),write(T), write(' milliseconds'),nl,
write(Dict),nl.
regions(Rs,Dict):-
findall(R,neighbors(R,_),Rs),
length(Rs,N),
functor(Dict,colors,N).
solve([],_).
solve([R|Rs],Dict):-
arg(R,Dict,C),
color(C),
\+ inconsistent(R,C,Dict),
solve(Rs,Dict).
inconsistent(R,C,Dict):-
neighbors(R,Rs),
lmember(Rs,Dict,C).
color(red).
color(blue).
color(black).
color(yellow).
lmember([X|_],Dict,C):-arg(X,Dict,C).
lmember([_|Xs],Dict,C):-lmember(Xs,Dict,C).
neighbors(1,[]).
neighbors(2,[1]).
neighbors(3,[1,2]).
neighbors(4,[1,3]).
neighbors(5,[1,4]).
neighbors(6,[1,5]).
neighbors(7,[1,6]).
neighbors(8,[1,7]).
neighbors(9,[1,8]).
neighbors(10,[1,9]).
neighbors(11,[1,10]).
neighbors(12,[2,3]).
neighbors(13,[3,4,12]).
neighbors(14,[4,5,13]).
neighbors(15,[5,6,14]).
neighbors(16,[6,7,15]).
neighbors(17,[7,8,16]).
neighbors(18,[8,9,17]).
neighbors(19,[9,10,18]).
neighbors(20,[1,10,11,19]).
neighbors(21,[12,13]).
neighbors(22,[13,14,21]).
neighbors(23,[14,15,22]).
neighbors(24,[15,16,23]).
neighbors(25,[16,17,24]).
neighbors(26,[17,18,25]).
neighbors(27,[18,19,26]).
neighbors(28,[19,20,27]).
neighbors(29,[21,22]).
neighbors(30,[22,23,29]).
neighbors(31,[23,24,30]).
neighbors(32,[24,25,31]).
neighbors(33,[25,26,32]).
neighbors(34,[26,27,33]).
neighbors(35,[27,28,34]).
neighbors(36,[29,30]).
neighbors(37,[30,31,36]).
neighbors(38,[31,32,37]).
neighbors(39,[32,33,38]).
neighbors(40,[33,34,39]).
neighbors(41,[34,35,40]).
neighbors(42,[36,37]).
neighbors(43,[37,38,42]).
neighbors(44,[38,39,43]).
neighbors(45,[39,40,44]).
neighbors(46,[40,41,45]).
neighbors(47,[42,43]).
neighbors(48,[43,44,47]).
neighbors(49,[44,45,48]).
neighbors(50,[45,46,49]).
neighbors(51,[47,48]).
neighbors(52,[48,49,51]).
neighbors(53,[49,50,52]).
neighbors(54,[51,52]).
neighbors(55,[52,53,54]).
neighbors(56,[54,55]).
neighbors(57,[2,12]).
neighbors(58,[12,21,57]).
neighbors(59,[21,29,58]).
neighbors(60,[29,36,59]).
neighbors(61,[36,42,60]).
neighbors(62,[42,47,61]).
neighbors(63,[47,51,62]).
neighbors(64,[51,54,63]).
neighbors(65,[54,56,64]).
neighbors(66,[55,56,65]).
neighbors(67,[53,55,66]).
neighbors(68,[50,53,67]).
neighbors(69,[46,50,68]).
neighbors(70,[41,46,69]).
neighbors(71,[35,41,70]).
neighbors(72,[28,35,71]).
neighbors(73,[1,20,28,72]).
neighbors(74,[64,65,66,67]).
neighbors(75,[63,64,74]).
neighbors(76,[67,68,74,75]).
neighbors(77,[62,63,75]).
neighbors(78,[75,76,77]).
neighbors(79,[68,69,76,78]).
neighbors(80,[61,62,77]).
neighbors(81,[77,78,80]).
neighbors(82,[78,79,81]).
neighbors(83,[69,70,79,82]).
neighbors(84,[60,61,80]).
neighbors(85,[80,81,84]).
neighbors(86,[81,82,85]).
neighbors(87,[82,83,86]).
neighbors(88,[70,71,83,87]).
neighbors(89,[59,60,84]).
neighbors(90,[84,85,89]).
neighbors(91,[85,86,90]).
neighbors(92,[86,87,91]).
neighbors(93,[87,88,92]).
neighbors(94,[71,72,88,93]).
neighbors(95,[58,59,89]).
neighbors(96,[89,90,95]).
neighbors(97,[90,91,96]).
neighbors(98,[91,92,97]).
neighbors(99,[92,93,98]).
neighbors(100,[93,94,99]).
neighbors(101,[72,73,94,100]).
neighbors(102,[2,57,58,95]).
neighbors(103,[2,95,96,102]).
neighbors(104,[2,96,97,103]).
neighbors(105,[2,97,98,104]).
neighbors(106,[2,98,99,105]).
neighbors(107,[99,100,106]).
neighbors(108,[100,101,107]).
neighbors(109,[1,73,101,108]).
neighbors(110,[1,2,106,107,108,109]).